<?php
	
	namespace Aspic;
	
	class Validator {
		
		
		public static function isEmail($data) {
			$data = (is_array($data)?null:$data);
			
			return (bool)preg_match('#^\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b$#iD', $data);
		}
		
		public static function isFileName($data) {
			$data = (is_array($data)?null:$data);
			
			$regex = '#^[\\(\\).a-z0-9_-]+\.[\\(\\)a-z0-9_-]+$#iD';
			
			return (bool)preg_match($regex, $data);
		}
		
		/**
		* Check if the given path is a sub path
		* ex:
		* my/path - true
		* my/path/.. - true
		* my/path/../.. - false
		* ../path - false
		* my/path/../. - true
		*/
		public static function isDownPath($data) {
			if (!is_string($data)) {
				return false;
			}
			
			$data = (is_array($data)?null:$data);
			// $parts = preg_split('#[\\\\/]+#', $path);
			$parts = static::splitPath($data);
			$level = 0;
			foreach ($parts as $part) {
				if ('..' === $part) {
					--$level;
				} elseif ('.' !== $part) {
					++$level;
				}

				if ($level < 0) {
					return false;
				}
			}

			return true;
		}
		
		public static function isAlpha($data) {
			$data = (is_array($data)?null:$data);
		
			if(ctype_alpha($data))
				return true;
			else
				return false;
		}
		
		public static function isAlpha2($data) {
			$data = (is_array($data)?null:$data);
		
			if(preg_match('#^[a-z_-]+$#iD',$data))
				return true;
			else
				return false;
		}
		
		public static function isAlnum($data) {
			$data = (is_array($data)?null:$data);
		
			if(ctype_alnum($data))
				return true;
			else
				return false;
		}
		
		public static function isAlnum2($data) {
			$data = (is_array($data)?null:$data);
		
			if(preg_match('#^[a-z0-9_-]+$#iD',$data))
				return true;
			else
				return false;
		}
		
		public static function isDigit($data) {
			$data = (is_array($data)?null:$data);
		
			if(ctype_digit($data))
				return true;
			else
				return false;
		}
		
		public static function isNumeric($data) {
			return is_numeric($data);
		}
		
		public static function isLessThan($data, $value) {
			if (is_array($data) OR is_null($data)) {
				return false;
			}
		
			if($data < $value)
				return true;
			else
				return false;
		}
		
		public static function isGreaterThan($data, $value) {
			if (is_array($data) OR is_null($data)) {
				return false;
			}
		
			if($data > $value)
				return true;
			else
				return false;
		}
		
		
		/**
		* Check if fieldValue is in the given list of value (param 1)
		*/
		public static function isInList($data, $array) {
			if (is_array($data) OR is_null($data)) {
				return false;
			}
			
			return in_array($data, $array);
		}

		public static function isInRange($data, $min, $max) {
			if (is_array($data) OR is_null($data)) {
				return false;
			}
		
			if($data >= $min AND $data <= $max)
				return true;
			else
				return false;
		}
		
		public static function isNotInRange($data, $min, $max) {
			if (is_array($data) OR is_null($data)) {
				return false;
			}
		
			if($data <= $min OR $data >= $max)
				return true;
			else
				return false;
		}
		
		public static function maxLength($data, $max) {
			if (!is_string($data)) {
				return false;
			}
		
			if(strlen($data) <= $max)
				return true;
			else
				return false;
		}
			
		public static function minLength($data, $min) {
			if (!is_string($data)) {
				return false;
			}
		
			if(strlen($data) >= $min)
				return true;
			else
				return false;
		}
		
		public static function lengthRange($data, $min, $max) {
			if (!is_string($data)) {
				return false;
			}
		
			if(strlen($data) >= $min AND strlen($data) <= $max)
				return true;
			else
				return false;
		}
		
		public static function date($data, $format) {
			if (!is_string($data)) {
				return false;
			}
			
			$dateInfo = date_parse_from_format($format, $data);
			
			return (bool)!$dateInfo['error_count'];
		}
		
		/**
		* An array of primivite (not array) values
		*/
		public static function isSimpleArray($data) {
			if(is_array($data)) {
				foreach($data as $item) {
					if(is_array($item)) {
						return false;
					}
				}
				
				return true;
			}
			else {
				return false;
			}
		}
		
	}
	
?>